/**
 * 给定字符串S和目标字符串T，要把S变为T。有两种变换手段 
 * 令字母c是字母表中的第i个字母，将其变为c+1,用掉代价为nextCost[i]
 * 将其变为c-1，用掉代价为previousCost[i]
 * 问如何操作变化代价最小
 * 显然枚举一下，每个字母是独立的，且只有两种方法，一直向前或者一直向后
 * O(26N)
 */
class Solution {
public:
    long long shiftDistance(string s, string t, vector<int>& nextCost, vector<int>& previousCost) {
        int n = s.length();
        long long ans = 0;
        for(int i=0;i<n;++i){
            ans += min(f(s[i], t[i], nextCost), g(s[i], t[i], previousCost));
        }
        return ans;
    }

    int tr(char a, char b){
        return ((b - a) + 26) % 26;
    }

    long long f(char a, char b, vector<int>& c){
        long long ans = 0;
        while(a != b){
            ans += c[a - 'a'];
            a += 1;
            if(a > 'z') a = 'a';     
        }
        return ans;
    }

    long long g(char a, char b, vector<int>& c){
        long long ans = 0;
        while(a != b){
            ans += c[a - 'a'];
            a -= 1;
            if(a < 'a') a = 'z';     
        }
        return ans;
    }
};